package com.ms.utils;

import com.ms.entity.Manager;
import com.ms.entity.Organizer;
import com.ms.entity.User;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 简化的 Token 工具类（生成、验证、存储用户）
 */
public class SimpleTokenUtils {
    // 存储 Token-用户映射关系，支持多种用户类型
    private static final ConcurrentHashMap<String, Object> tokenUserMap = new ConcurrentHashMap<>();
    // 存储 Token 过期时间（毫秒）
    private static final ConcurrentHashMap<String, Long> tokenExpireMap = new ConcurrentHashMap<>();

    // 生成 Token（30分钟过期）- 针对Manager
    public static String generateToken(Manager user) {
        String token = UUID.randomUUID().toString().replace("-", "");
        tokenUserMap.put(token, user);
        tokenExpireMap.put(token, System.currentTimeMillis() + 30 * 60 * 1000); // 30分钟
        return token;
    }

    // 生成 Token（30分钟过期）- 针对Organizer
    public static String generateToken(Organizer user) {
        String token = UUID.randomUUID().toString().replace("-", "");
        tokenUserMap.put(token, user);
        tokenExpireMap.put(token, System.currentTimeMillis() + 30 * 60 * 1000); // 30分钟
        return token;
    }
    // 生成 Token（30分钟过期）- 针对User
    public static String generateToken(User user) {
        String token = UUID.randomUUID().toString().replace("-", "");
        tokenUserMap.put(token, user);
        tokenExpireMap.put(token, System.currentTimeMillis() + 30 * 60 * 1000); // 30分钟
        return token;
    }


    // 通过 Token 获取用户（验证是否过期）
    public static Object getUserByToken(String token) {
        Long expireTime = tokenExpireMap.get(token);
        // 检查是否过期或不存在
        if (expireTime == null || System.currentTimeMillis() > expireTime) {
            removeToken(token);
            return null;
        }
        return tokenUserMap.get(token);
    }

    // 移除 Token（登出）
    public static void removeToken(String token) {
        tokenUserMap.remove(token);
        tokenExpireMap.remove(token);
    }
}